package com.tdd.api.server.domain;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tdd.api.server.domain.param.BasePageParam;
import org.springframework.util.CollectionUtils;

import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;


public class PageUtil {

    public static IPage initPage(BasePageParam param){
        param.setOffset(param.getPageSize()*(param.getPageNum()-1));
        return new Page<>(param.getPageNum(),param.getPageSize());

    }



    public static PageModule convert(IPage resultList){
        PageModule pageModule = new PageModule();

        pageModule.setRecords(resultList.getRecords());
        pageModule.setTotal((int) resultList.getTotal());
        pageModule.setPageNum((int) resultList.getCurrent());
        pageModule.setPageSize((int) resultList.getSize());
        pageModule.setPages((int) resultList.getPages());
        return pageModule;
    }


    public static <R, T> PageModule<T> convertPage2PageData(IPage<R> sourcePageData, Function<R, T> mapper) {
        PageModule<T> pageModule = new PageModule();
        List<R> records = sourcePageData.getRecords();
        if (!CollectionUtils.isEmpty(records)) {
            if (Objects.isNull(mapper)) {
                pageModule.setRecords((Collection)records);
            } else {
                pageModule.setRecords(records.stream().map(mapper).collect(Collectors.toList()));
            }
        }
        pageModule.setTotal((int)sourcePageData.getTotal());
        pageModule.setPageNum((int)sourcePageData.getCurrent());
        pageModule.setPageSize((int)sourcePageData.getSize());
        return pageModule;
    }
}
